package generic;

import java.lang.reflect.Array;

class Building{}

class House extends Building{
	
	public void hello(){
		System.out.println("h");
	}
}

public class ClassTypeCapture<T>{

	Class<T> kind;
	
	public ClassTypeCapture(Class<T> kind) {
		this.kind = kind;
	}
	
	public boolean f(Object obj){
		return kind.isInstance(obj);
	}
	
	public T[] createArray(){
		T[] result = (T[])Array.newInstance(kind, 10);
		T[] result2 = (T[])new Object[10];
		return result;
	}
	
	public static void main(String[] args) {
		ClassTypeCapture<Building> ctt1 = new ClassTypeCapture<Building>(Building.class);
		System.out.println(ctt1.f(new Building()));
		System.out.println(ctt1.f(new House()));
		ClassTypeCapture<House> ctt2 = new ClassTypeCapture<House>(House.class);
		System.out.println(ctt2.f(new Building()));
		System.out.println(ctt2.f(new House()));
		
		ctt2.createArray();
	}
}
